package sort;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;

import java.io.IOException;

/**
 * @author LIAO
 * 需求：排序，要求第一列按照字典顺序进行排列，第一列相同的时候, 第二列按照升序进行排列。
 * 测试数据
 * a 1
 * a 3
 * b 1
 * a 2
 * c 2
 * c 1
 */
public class JobMain {

    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        //一、初始化一个Job对象
        Configuration configuration = new Configuration();
        Job job = Job.getInstance(configuration, "sort");

        //二、设置Job对象的各种信息，里面包含了8个小步骤
        //1、设置输入路径，让程序找到源文件的位置
        job.setInputFormatClass(TextInputFormat.class);

        TextInputFormat.addInputPath(job, new Path(args[0]));

        //2、设置Mapper类型，并设置k2 v2
        job.setMapperClass(SortMapper.class);
        job.setMapOutputKeyClass(MySortBean.class);
        job.setMapOutputValueClass(NullWritable.class);

        //3 4 5 6 四个步骤，都是Shuffle阶段，现在使用默认的就可以

        //7、设置Reducer类型，并设置k3 v3
        job.setReducerClass(SortReducer.class);
        job.setOutputKeyClass(MySortBean.class);
        job.setOutputValueClass(NullWritable.class);

        //8、设置输出路径，让结果文件存储到某个地方去
        job.setOutputFormatClass(TextOutputFormat.class);
        TextOutputFormat.setOutputPath(job, new Path(args[1]));

        //三、等待程序完成，提交
        boolean b = job.waitForCompletion(true);
        System.out.println(b);
        System.exit(b ? 0 : 1);
    }
}
